Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


sbapp/kivymd/uix/datatables/datatables.py f8b3e3760b831745cf10d97aeae64e9c00a136a9 (f8b3e376) Text, 71.27 KB

T8b949e"""
Components/DataTables
=====================

.. seealso::

`Material Design spec, DataTables <https://material.io/components/data-tables>`_

.. rubric:: Data tables display sets of data across rows and columns.

.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/data-tables-previous.png
:align: center

.. note:: `MDDataTable` allows developers to sort the data provided by column.
This happens thanks to the use of an external function that you can bind
while you're defining the table columns. Be aware that the sorting function
must return a 2 value list in the format of:
`[Index, Sorted_Row_Data]`

This is because the index list is needed to allow MDDataTable to keep track
of the selected rows. and, after the data is sorted, update the row
checkboxes.

"""

T8b949e# Special thanks for the info -
T8b949e# https://stackoverflow.com/questions/50219281/python-how-to-add-vertical-scroll-in-recycleview

Te6edf3__all__ Tff7b72= Tb4b4b4(Ta5d6ff"Ta5d6ffMDDataTableTa5d6ff"Tb4b4b4,Tb4b4b4)

Tff7b72import T7ee787os
Tff7b72from T7ee787collections Tff7b72import Te6edf3defaultdict
Tff7b72from T7ee787typing Tff7b72import Te6edf3Union

Tff7b72from T7ee787kivyT7ee787.T7ee787clock Tff7b72import Te6edf3Clock
Tff7b72from T7ee787kivyT7ee787.T7ee787lang Tff7b72import Te6edf3Builder
Tff7b72from T7ee787kivyT7ee787.T7ee787metrics Tff7b72import Te6edf3dp
Tff7b72from T7ee787kivyT7ee787.T7ee787properties Tff7b72import Tb4b4b4(
Te6edf3BooleanPropertyTb4b4b4,
Te6edf3BoundedNumericPropertyTb4b4b4,
Te6edf3ColorPropertyTb4b4b4,
Te6edf3DictPropertyTb4b4b4,
Te6edf3ListPropertyTb4b4b4,
Te6edf3NumericPropertyTb4b4b4,
Te6edf3ObjectPropertyTb4b4b4,
Te6edf3OptionPropertyTb4b4b4,
Te6edf3StringPropertyTb4b4b4,
Te6edf3VariableListPropertyTb4b4b4,
Tb4b4b4)
Tff7b72from T7ee787kivyT7ee787.T7ee787uixT7ee787.T7ee787anchorlayout Tff7b72import Te6edf3AnchorLayout
Tff7b72from T7ee787kivyT7ee787.T7ee787uixT7ee787.T7ee787behaviors Tff7b72import Te6edf3ButtonBehaviorTb4b4b4, Te6edf3FocusBehavior
Tff7b72from T7ee787kivyT7ee787.T7ee787uixT7ee787.T7ee787boxlayout Tff7b72import Te6edf3BoxLayout
Tff7b72from T7ee787kivyT7ee787.T7ee787uixT7ee787.T7ee787recyclegridlayout Tff7b72import Te6edf3RecycleGridLayout
Tff7b72from T7ee787kivyT7ee787.T7ee787uixT7ee787.T7ee787recycleview Tff7b72import Te6edf3RecycleView
Tff7b72from T7ee787kivyT7ee787.T7ee787uixT7ee787.T7ee787recycleviewT7ee787.T7ee787layout Tff7b72import Te6edf3LayoutSelectionBehavior
Tff7b72from T7ee787kivyT7ee787.T7ee787uixT7ee787.T7ee787recycleviewT7ee787.T7ee787views Tff7b72import Te6edf3RecycleDataViewBehavior
Tff7b72from T7ee787kivyT7ee787.T7ee787uixT7ee787.T7ee787scrollview Tff7b72import Te6edf3ScrollView

Tff7b72from T7ee787kivymd Tff7b72import Te6edf3uix_path
Tff7b72from T7ee787kivymdT7ee787.T7ee787effectsT7ee787.T7ee787stiffscroll Tff7b72import Te6edf3StiffScrollEffect
Tff7b72from T7ee787kivymdT7ee787.T7ee787material_resources Tff7b72import Tb4b4b4(
Te6edf3DATA_TABLE_ELEVATIONTb4b4b4,
Te6edf3DATA_TABLE_OFFSETTb4b4b4,
Te6edf3DATA_TABLE_SOFTNESSTb4b4b4,
Tb4b4b4)
Tff7b72from T7ee787kivymdT7ee787.T7ee787theming Tff7b72import Te6edf3ThemableBehavior
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787behaviors Tff7b72import Te6edf3HoverBehavior
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787boxlayout Tff7b72import Te6edf3MDBoxLayout
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787button Tff7b72import Te6edf3MDIconButton
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787menu Tff7b72import Te6edf3MDDropdownMenu
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787selectioncontrol Tff7b72import Te6edf3MDCheckbox
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787tooltip Tff7b72import Te6edf3MDTooltip

Tff7b72with Tffa657openTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3uix_pathTb4b4b4, Ta5d6ff"Ta5d6ffdatatablesTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffdatatables.kvTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"
Tb4b4b4) Tff7b72as Te6edf3kv_fileTb4b4b4:
Te6edf3BuilderTff7b72.Td2a8ffload_stringTb4b4b4(Te6edf3kv_fileTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)Tb4b4b4)


Tff7b72class T56d364TableRecycleGridLayoutTb4b4b4(
Te6edf3FocusBehaviorTb4b4b4, Te6edf3LayoutSelectionBehaviorTb4b4b4, Te6edf3RecycleGridLayout
Tb4b4b4)Tb4b4b4:
Te6edf3selected_row Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff0Tb4b4b4)
Te6edf3table_data Tff7b72= Te6edf3ObjectPropertyTb4b4b4(Tff7b72NoneTb4b4b4)

Tff7b72def Td2a8ffget_nodesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3nodes Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_selectable_nodesTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffnodes_order_reversedTb4b4b4:
Te6edf3nodes Tff7b72= Te6edf3nodesTb4b4b4[Tb4b4b4:Tb4b4b4:Tff7b72-T79c0ff1Tb4b4b4]
Tff7b72if Tff7b72not Te6edf3nodesTb4b4b4:
Tff7b72return Tff7b72NoneTb4b4b4, Tff7b72None

Te6edf3selected Tff7b72= Tff7b72selfTff7b72.Td2a8ffselected_nodes
Tff7b72if Tff7b72not Te6edf3selectedTb4b4b4: T8b949e# nothing selected, select the first
Tff7b72selfTff7b72.Td2a8ffselected_row Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffselect_rowTb4b4b4(Te6edf3nodesTb4b4b4)
Tff7b72return Tff7b72NoneTb4b4b4, Tff7b72None

Tff7b72if Tffa657lenTb4b4b4(Te6edf3nodesTb4b4b4) Tff7b72== T79c0ff1Tb4b4b4: T8b949e# the only selectable node is selected already
Tff7b72return Tff7b72NoneTb4b4b4, Tff7b72None

Te6edf3index Tff7b72= Te6edf3selectedTb4b4b4[Tff7b72-T79c0ff1Tb4b4b4]
Tff7b72if Te6edf3index Tff7b72> Tffa657lenTb4b4b4(Te6edf3nodesTb4b4b4)Tb4b4b4:
Te6edf3last Tff7b72= Tffa657lenTb4b4b4(Te6edf3nodesTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3last Tff7b72= Te6edf3nodesTff7b72.Td2a8ffindexTb4b4b4(Te6edf3indexTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffclear_selectionTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3lastTb4b4b4, Te6edf3nodes

Tff7b72def Td2a8ffselect_nextTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3instanceTb4b4b4)Tb4b4b4:
T8b949e"""Select next row."""

Tff7b72selfTff7b72.Td2a8fftable_data Tff7b72= Te6edf3instance
Te6edf3lastTb4b4b4, Te6edf3nodes Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_nodesTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3nodesTb4b4b4:
Tff7b72return

Tff7b72if Te6edf3last Tff7b72== Tffa657lenTb4b4b4(Te6edf3nodesTb4b4b4) Tff7b72- T79c0ff1Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffselected_row Tff7b72= Te6edf3nodesTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffselected_row Tff7b72= Te6edf3nodesTb4b4b4[Te6edf3last Tff7b72+ T79c0ff1Tb4b4b4]

Tff7b72selfTff7b72.Td2a8ffselected_row Tff7b72+Tff7b72= Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8fftotal_col_headings
Tff7b72selfTff7b72.Td2a8ffselect_rowTb4b4b4(Te6edf3nodesTb4b4b4)

Tff7b72def Td2a8ffselect_currentTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3instanceTb4b4b4)Tb4b4b4:
T8b949e"""Select current row."""

Tff7b72selfTff7b72.Td2a8fftable_data Tff7b72= Te6edf3instance
Te6edf3lastTb4b4b4, Te6edf3nodes Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_nodesTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3nodesTb4b4b4:
Tff7b72return

Tff7b72selfTff7b72.Td2a8ffselect_rowTb4b4b4(Te6edf3nodesTb4b4b4)

Tff7b72def Td2a8ffselect_rowTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3nodesTb4b4b4)Tb4b4b4:
Te6edf3col Tff7b72= Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ffrecycle_dataTb4b4b4[Tff7b72selfTff7b72.Td2a8ffselected_rowTb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffrangeTa5d6ff"Tb4b4b4]
Tff7b72for Te6edf3x Tff7b72in Tffa657rangeTb4b4b4(Te6edf3colTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3colTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72+ T79c0ff1Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffselect_nodeTb4b4b4(Te6edf3nodesTb4b4b4[Te6edf3xTb4b4b4]Tb4b4b4)


Tff7b72class T56d364CellHeaderTb4b4b4(Te6edf3MDTooltipTb4b4b4, Te6edf3BoxLayoutTb4b4b4)Tb4b4b4:
T8b949e"""
Implements the label text in the column header panel from
:attr:`~MDDataTable.column_data` data.
"""

Te6edf3text Tff7b72= Te6edf3StringPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
Column text.

:attr:`text` is an :class:`~kivy.properties.StringProperty`
and defaults to `''`.
"""

Te6edf3tooltip Tff7b72= Te6edf3StringPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
Tooltip containing descriptive text for the column.
If the tooltip is not provided, column `text` shall be used instead.

:attr:`tooltip` is a :class:`~kivy.properties.StringProperty`
and defaults to `''`.
"""

T8b949e# TODO: Added example.
Te6edf3sort_action Tff7b72= Te6edf3ObjectPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
Custom function for sorting.

:attr:`sort_action` is an :class:`~kivy.properties.ObjectProperty`
and defaults to `None`.
"""

Te6edf3table_data Tff7b72= Te6edf3ObjectPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
:class:`~TableData` class.

:attr:`table_data` is an :class:`~kivy.properties.ObjectProperty`
and defaults to `None`.
"""

Te6edf3is_sorted Tff7b72= Te6edf3BooleanPropertyTb4b4b4(Tff7b72FalseTb4b4b4)
Te6edf3sorted_order Tff7b72= Te6edf3StringPropertyTb4b4b4(Tb4b4b4)

Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsort_actionTb4b4b4:
Te6edf3box Tff7b72= Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffbox
Te6edf3ib Tff7b72= Te6edf3SortButtonTb4b4b4(Tb4b4b4)
Te6edf3ibTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Tff7b72selfTff7b72.Td2a8ff_sort_releaseTb4b4b4)

Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_sortedTb4b4b4:
Te6edf3ibTff7b72.Td2a8fficon Tff7b72= Tb4b4b4(
Ta5d6ff"Ta5d6ffarrow-downTa5d6ff" Tff7b72if Tff7b72selfTff7b72.Td2a8ffsorted_order Tff7b72== Ta5d6ff"Ta5d6ffASCTa5d6ff" Tff7b72else Ta5d6ff"Ta5d6ffarrow-upTa5d6ff"
Tb4b4b4)
Te6edf3ibTff7b72.Td2a8ffsize Tff7b72= Tb4b4b4[Te6edf3dpTb4b4b4(T79c0ff24Tb4b4b4)Tb4b4b4, Te6edf3dpTb4b4b4(T79c0ff24Tb4b4b4)Tb4b4b4]
Te6edf3ibTff7b72.Td2a8ffopacity Tff7b72= T79c0ff1
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_enterTff7b72=Tff7b72selfTff7b72.Td2a8ffset_sort_btnTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_leaveTff7b72=Tff7b72selfTff7b72.Td2a8ffset_sort_btnTb4b4b4)

Te6edf3boxTff7b72.Td2a8ffadd_widgetTb4b4b4(Te6edf3ibTb4b4b4, Te6edf3indexTff7b72=T79c0ff1Tb4b4b4)

Tff7b72def Td2a8ffrestore_checksTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3indicesTb4b4b4: Tffa657dictTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3curr_checks Tff7b72= Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ffcurrent_selection_check
Te6edf3rows_num Tff7b72= Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ffrows_num
Te6edf3columns Tff7b72= Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8fftotal_col_headings

Te6edf3new_checks Tff7b72= Te6edf3defaultdictTb4b4b4(Tffa657listTb4b4b4)
Tff7b72for Te6edf3iTb4b4b4, Te6edf3x Tff7b72in Tffa657enumerateTb4b4b4(Te6edf3curr_checksTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3jTb4b4b4, Te6edf3y Tff7b72in Tffa657enumerateTb4b4b4(Te6edf3curr_checksTb4b4b4[Te6edf3xTb4b4b4]Tb4b4b4)Tb4b4b4:
Te6edf3new_page Tff7b72= Tb4b4b4(Te6edf3indicesTb4b4b4[Te6edf3y Tff7b72/Tff7b72/ Te6edf3columns Tff7b72+ Te6edf3x Tff7b72* Te6edf3rows_numTb4b4b4]Tb4b4b4) Tff7b72/Tff7b72/ Te6edf3rows_num
Te6edf3new_indice Tff7b72= Tb4b4b4(
Tb4b4b4(Te6edf3indicesTb4b4b4[Te6edf3y Tff7b72/Tff7b72/ Te6edf3columns Tff7b72+ Te6edf3x Tff7b72* Te6edf3rows_numTb4b4b4]Tb4b4b4) Tff7b72% Te6edf3rows_num
Tb4b4b4) Tff7b72* Te6edf3columns
Te6edf3new_checksTb4b4b4[Te6edf3new_pageTb4b4b4]Tff7b72.Td2a8ffappendTb4b4b4(Te6edf3new_indiceTb4b4b4)
Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ffcurrent_selection_check Tff7b72= Tffa657dictTb4b4b4(Te6edf3new_checksTb4b4b4)

Tff7b72def Td2a8ffset_sort_btnTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3instance_cell_headerTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3btn Tff7b72= Te6edf3instance_cell_headerTff7b72.Td2a8ffidsTff7b72.Td2a8ffboxTff7b72.Td2a8ffchildrenTb4b4b4[Tff7b72-T79c0ff1Tb4b4b4]
Tff7b72if Te6edf3btnTff7b72.Td2a8ffopacityTb4b4b4:
Te6edf3btnTff7b72.Td2a8ffsize Tff7b72= Tb4b4b4[Te6edf3dpTb4b4b4(T79c0ff24Tb4b4b4)Tb4b4b4, Te6edf3dpTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4]
Te6edf3btnTff7b72.Td2a8ffopacity Tff7b72= T79c0ff0
Tff7b72elseTb4b4b4:
Te6edf3btnTff7b72.Td2a8ffsize Tff7b72= Tb4b4b4[Te6edf3dpTb4b4b4(T79c0ff24Tb4b4b4)Tb4b4b4, Te6edf3dpTb4b4b4(T79c0ff24Tb4b4b4)Tb4b4b4]
Te6edf3btnTff7b72.Td2a8ffopacity Tff7b72= T79c0ff1

Tff7b72def Td2a8ff_sort_releaseTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3instTb4b4b4)Tb4b4b4:
Te6edf3instTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffarrow-downTa5d6ff" Tff7b72if Te6edf3instTff7b72.Td2a8fficon Tff7b72== Ta5d6ff"Ta5d6ffarrow-upTa5d6ff" Tff7b72else Ta5d6ff"Ta5d6ffarrow-upTa5d6ff"

Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffparentTff7b72.Td2a8ffparentTff7b72.Td2a8ff_col_with_sortTb4b4b4:
Te6edf3c Tff7b72= Tff7b72selfTff7b72.Td2a8ffparentTff7b72.Td2a8ffchildren
Te6edf3col_with_sort Tff7b72= Tb4b4b4[
Te6edf3each
Tff7b72for Te6edf3each Tff7b72in Te6edf3c
Tff7b72if Te6edf3eachTff7b72.Td2a8ffidsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffboxTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4) Tff7b72and Tffa657lenTb4b4b4(Te6edf3eachTff7b72.Td2a8ffidsTff7b72.Td2a8ffboxTff7b72.Td2a8ffchildrenTb4b4b4) Tff7b72== T79c0ff2
Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffparentTff7b72.Td2a8ffparentTff7b72.Td2a8ff_col_with_sort Tff7b72= Te6edf3col_with_sort
Tff7b72elseTb4b4b4:
Te6edf3col_with_sort Tff7b72= Tff7b72selfTff7b72.Td2a8ffparentTff7b72.Td2a8ffparentTff7b72.Td2a8ff_col_with_sort

Tff7b72for Te6edf3each Tff7b72in Te6edf3col_with_sortTb4b4b4:
Tff7b72if Te6edf3each Tff7b72== Tff7b72selfTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffunbindTb4b4b4(Te6edf3on_enterTff7b72=Tff7b72selfTff7b72.Td2a8ffset_sort_btnTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffunbindTb4b4b4(Te6edf3on_leaveTff7b72=Tff7b72selfTff7b72.Td2a8ffset_sort_btnTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3btn Tff7b72= Te6edf3eachTff7b72.Td2a8ffidsTff7b72.Td2a8ffboxTff7b72.Td2a8ffchildrenTb4b4b4[Tff7b72-T79c0ff1Tb4b4b4]
Te6edf3btnTff7b72.Td2a8ffsize Tff7b72= Tb4b4b4[Te6edf3dpTb4b4b4(T79c0ff24Tb4b4b4)Tb4b4b4, Te6edf3dpTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4]
Te6edf3btnTff7b72.Td2a8ffopacity Tff7b72= T79c0ff0
Te6edf3eachTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_enterTff7b72=Te6edf3eachTff7b72.Td2a8ffset_sort_btnTb4b4b4)
Te6edf3eachTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_leaveTff7b72=Te6edf3eachTff7b72.Td2a8ffset_sort_btnTb4b4b4)

Tff7b72if Tff7b72selfTff7b72.Td2a8ffsort_actionTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8fftable_dataTb4b4b4:
Te6edf3th Tff7b72= Tff7b72selfTff7b72.Td2a8ffparentTff7b72.Td2a8ffparent
Tff7b72selfTff7b72.Td2a8fftable_data Tff7b72= Te6edf3thTff7b72.Td2a8fftable_data

Te6edf3indicesTb4b4b4, Te6edf3sorted_data Tff7b72= Tff7b72selfTff7b72.Td2a8ffsort_actionTb4b4b4(Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ffrow_dataTb4b4b4)

Tff7b72if Tff7b72not Te6edf3sorted_dataTb4b4b4:
Tff7b72return

Tff7b72if Te6edf3instTff7b72.Td2a8fficon Tff7b72== Ta5d6ff"Ta5d6ffarrow-downTa5d6ff"Tb4b4b4:
Te6edf3sorted_data Tff7b72= Te6edf3sorted_dataTb4b4b4[Tb4b4b4:Tb4b4b4:Tff7b72-T79c0ff1Tb4b4b4]
Te6edf3indices Tff7b72= Te6edf3indicesTb4b4b4[Tb4b4b4:Tb4b4b4:Tff7b72-T79c0ff1Tb4b4b4]

Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ffrow_data Tff7b72= Te6edf3sorted_data
Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ffon_rows_numTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ffrows_numTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrestore_checksTb4b4b4(Tffa657dictTb4b4b4(Tffa657zipTb4b4b4(Te6edf3indicesTb4b4b4, Tffa657rangeTb4b4b4(Tffa657lenTb4b4b4(Te6edf3indicesTb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ffset_next_row_data_partsTb4b4b4(Ta5d6ff"Ta5d6ffresetTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ffcell_row_obj_dict Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8fftable_headerTff7b72.Td2a8ffidsTff7b72.Td2a8ffcheckTff7b72.Td2a8ffstate Tff7b72= Ta5d6ff"Ta5d6ffnormalTa5d6ff"


Tff7b72class T56d364TableHeaderTb4b4b4(Te6edf3ThemableBehaviorTb4b4b4, Te6edf3ScrollViewTb4b4b4)Tb4b4b4:
T8b949e"""
Implements a panel for column heading labels -
:attr:`~MDDataTable.column_data`.
"""

Te6edf3table_data Tff7b72= Te6edf3ObjectPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
Class :class:`~TableData`.

:attr:`table_data` is an :class:`~kivy.properties.ObjectProperty`
and defaults to `None`.
"""

Te6edf3column_data Tff7b72= Te6edf3ListPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
See :attr:`~MDDataTable.sorted_on`

:attr:`column_data` is an :class:`~kivy.properties.ListProperty`
and defaults to `[]`.
"""

Te6edf3sorted_on Tff7b72= Te6edf3StringPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
See :attr:`~MDDataTable.sorted_on`.

:attr:`sorted_on` is an :class:`~kivy.properties.StringProperty`
and defaults to `''`.
"""

Te6edf3cols_minimum Tff7b72= Te6edf3DictPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
See :attr:`~kivy.uix.gridlayout.GridLayout.cols_minimum`.

:attr:`cols_minimum` is an :class:`~kivy.properties.DictProperty`
and defaults to `{}`.
"""

Te6edf3sorted_order Tff7b72= Te6edf3StringPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
See :attr:`~MDDataTable.sorted_order`.

:attr:`sorted_order` is an :class:`~kivy.properties.StringProperty`
and defaults to `''`.
"""

Te6edf3background_color_header Tff7b72= Te6edf3ColorPropertyTb4b4b4(Tff7b72NoneTb4b4b4)
T8b949e"""
See :attr:`~MDDataTable.background_color_header`.

.. versionadded:: 1.0.0

:attr:`background_color_header` is an :class:`~kivy.properties.ColorProperty`
and defaults to `None`.
"""

Te6edf3_col_with_sort Tff7b72= Tb4b4b4[Tb4b4b4] T8b949e# store cols which contain sort functions
Te6edf3_col_headings Tff7b72= Te6edf3ListPropertyTb4b4b4(Tb4b4b4) T8b949e# column names list

Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
T8b949e# Create cells.
Tff7b72for Te6edf3iTb4b4b4, Te6edf3col_heading Tff7b72in Tffa657enumerateTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcolumn_dataTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcols_minimumTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3col_headingTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72* T79c0ff5
Tff7b72selfTff7b72.Td2a8ff_col_headingsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3col_headingTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
Tff7b72if Te6edf3iTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffheaderTff7b72.Td2a8ffadd_widgetTb4b4b4(
Tb4b4b4(
Te6edf3CellHeaderTb4b4b4(
Te6edf3textTff7b72=Te6edf3col_headingTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4,
Te6edf3sort_actionTff7b72=Te6edf3col_headingTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4,
Te6edf3tooltipTff7b72=Te6edf3col_headingTb4b4b4[T79c0ff3Tb4b4b4]Tb4b4b4,
Te6edf3widthTff7b72=Tff7b72selfTff7b72.Td2a8ffcols_minimumTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4,
Te6edf3table_dataTff7b72=Tff7b72selfTff7b72.Td2a8fftable_dataTb4b4b4,
Te6edf3is_sortedTff7b72=Tb4b4b4(Te6edf3col_headingTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72== Tff7b72selfTff7b72.Td2a8ffsorted_onTb4b4b4)Tb4b4b4,
Te6edf3sorted_orderTff7b72=Tff7b72selfTff7b72.Td2a8ffsorted_orderTb4b4b4,
Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3col_headingTb4b4b4) Tff7b72== T79c0ff4
Tff7b72else Te6edf3CellHeaderTb4b4b4(
Te6edf3textTff7b72=Te6edf3col_headingTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4,
Te6edf3sort_actionTff7b72=Te6edf3col_headingTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4,
Te6edf3widthTff7b72=Tff7b72selfTff7b72.Td2a8ffcols_minimumTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4,
Te6edf3table_dataTff7b72=Tff7b72selfTff7b72.Td2a8fftable_dataTb4b4b4,
Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3col_headingTb4b4b4) Tff7b72== T79c0ff3
Tff7b72else Te6edf3CellHeaderTb4b4b4(
Te6edf3textTff7b72=Te6edf3col_headingTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4,
Te6edf3widthTff7b72=Tff7b72selfTff7b72.Td2a8ffcols_minimumTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4,
Te6edf3table_dataTff7b72=Tff7b72selfTff7b72.Td2a8fftable_dataTb4b4b4,
Tb4b4b4)
Tb4b4b4)
Tb4b4b4)
Tff7b72elseTb4b4b4:
T8b949e# Sets the text in the first cell.
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8fffirst_cellTff7b72.Td2a8fftext Tff7b72= Te6edf3col_headingTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8fffirst_cellTff7b72.Td2a8fftooltip Tff7b72= Tb4b4b4(
Te6edf3col_headingTb4b4b4[T79c0ff3Tb4b4b4] Tff7b72if Tffa657lenTb4b4b4(Te6edf3col_headingTb4b4b4) Tff7b72== T79c0ff4 Tff7b72else Ta5d6ff"Ta5d6ff"
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8fffirst_cellTff7b72.Td2a8ffidsTff7b72.Td2a8ffseparatorTff7b72.Td2a8ffheight Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8fffirst_cellTff7b72.Td2a8ffwidth Tff7b72= Tff7b72selfTff7b72.Td2a8ffcols_minimumTb4b4b4[Te6edf3iTb4b4b4]

Tff7b72def Td2a8ffon_table_dataTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3instance_table_headerTb4b4b4, Te6edf3instance_table_dataTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Sets the checkbox in the first cell."""

Tff7b72if Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ffcheckTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffcheckTff7b72.Td2a8ffsize Tff7b72= Tb4b4b4(Te6edf3dpTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4, Te6edf3dpTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffcheckTff7b72.Td2a8ffopacity Tff7b72= T79c0ff1
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffboxTff7b72.Td2a8ffpaddingTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffboxTff7b72.Td2a8ffspacing Tff7b72= T79c0ff0


Tff7b72class T56d364TableDataTb4b4b4(Te6edf3RecycleViewTb4b4b4)Tb4b4b4:
T8b949e"""Implements a list of table data."""

Te6edf3recycle_data Tff7b72= Te6edf3ListPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
See :attr:`~kivy.uix.recycleview.RecycleView.data`.

:attr:`recycle_data` is an :class:`~kivy.properties.ListProperty`
and defaults to `[]`.
"""

Te6edf3data_first_cells Tff7b72= Te6edf3ListPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
List of first row cells.

:attr:`data_first_cells` is an :class:`~kivy.properties.ListProperty`
and defaults to `[]`.
"""

Te6edf3row_data Tff7b72= Te6edf3ListPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
See :attr:`~MDDataTable.row_data`.

:attr:`row_data` is an :class:`~kivy.properties.ListProperty`
and defaults to `[]`.
"""

Te6edf3total_col_headings Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff0Tb4b4b4) T8b949e# TableHeader._col_headings
T8b949e"""
See :attr:`~TableHeader._col_headings`.

:attr:`total_col_headings` is an :class:`~kivy.properties.NumericProperty`
and defaults to `0`.
"""

Te6edf3cols_minimum Tff7b72= Te6edf3DictPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
See :attr:`~TableHeader.cols_minimum`.

:attr:`cols_minimum` is an :class:`~kivy.properties.DictProperty`
and defaults to `{}`.
"""

Te6edf3table_header Tff7b72= Te6edf3ObjectPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
:class:`~TableHeader` class.

:attr:`table_header` is an :class:`~kivy.properties.ObjectProperty`
and defaults to `None`.
"""

Te6edf3pagination_menu Tff7b72= Te6edf3ObjectPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
:class:`~kivymd.uix.menu.MDDropdownMenu` class.

:attr:`pagination_menu` is an :class:`~kivy.properties.ObjectProperty`
and defaults to `None`.
"""

Te6edf3pagination Tff7b72= Te6edf3ObjectPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
:class:`~TablePagination` class.

:attr:`pagination` is an :class:`~kivy.properties.ObjectProperty`
and defaults to `None`.
"""

Te6edf3check Tff7b72= Te6edf3ObjectPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
See :attr:`~MDDataTable.check`.

:attr:`check` is an :class:`~kivy.properties.ObjectProperty`
and defaults to `None`.
"""

Te6edf3rows_num Tff7b72= Te6edf3NumericPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
Number of rows displayed on the table page.

:attr:`rows_num` is an :class:`~kivy.properties.NumericProperty`
and defaults to `None`.
"""

Te6edf3pagination_menu_open Tff7b72= Te6edf3BooleanPropertyTb4b4b4(Tff7b72FalseTb4b4b4)
T8b949e"""
Open or close the menu for selecting the number of rows displayed
on the table page.

:attr:`pagination_menu_open` is an :class:`~kivy.properties.BooleanProperty`
and defaults to `False`.
"""

Te6edf3current_selection_check Tff7b72= Te6edf3DictPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
List of indexes of marked checkboxes.

:attr:`current_selection_check` is an :class:`~kivy.properties.DictProperty`
and defaults to `{}`.
"""

Te6edf3cell_row_obj_dict Tff7b72= Tb4b4b4{Tb4b4b4}

Te6edf3_parent Tff7b72= Te6edf3ObjectPropertyTb4b4b4(Tb4b4b4)
Te6edf3_rows_number Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff0Tb4b4b4)
Te6edf3_rows_num Tff7b72= Te6edf3NumericPropertyTb4b4b4(Tb4b4b4)
Te6edf3_current_value Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff1Tb4b4b4)
Te6edf3_to_value Tff7b72= Te6edf3NumericPropertyTb4b4b4(Tb4b4b4)
Te6edf3_row_data_parts Tff7b72= Te6edf3ListPropertyTb4b4b4(Tb4b4b4)

Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3table_headerTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Tff7b72selfTff7b72.Td2a8fftable_header Tff7b72= Te6edf3table_header
Tff7b72selfTff7b72.Td2a8fftotal_col_headings Tff7b72= Tffa657lenTb4b4b4(Te6edf3table_headerTff7b72.Td2a8ff_col_headingsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcols_minimum Tff7b72= Te6edf3table_headerTff7b72.Td2a8ffcols_minimum
Tff7b72selfTff7b72.Td2a8ffset_row_dataTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffeffect_cls Tff7b72= Tff7b72selfTff7b72.Td2a8ff_parentTff7b72.Td2a8ffeffect_cls
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Tff7b72selfTff7b72.Td2a8ffset_default_first_rowTb4b4b4, T79c0ff0Tb4b4b4)

Tff7b72def Td2a8ffget_select_rowTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3indexTb4b4b4: Tffa657intTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Returns the current row with all elements."""

Te6edf3row Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3data Tff7b72in Tff7b72selfTff7b72.Td2a8ffrecycle_dataTb4b4b4:
Tff7b72if Te6edf3index Tff7b72in Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffrangeTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3rowTff7b72.Td2a8ffappendTb4b4b4(Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6fftextTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_parentTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_check_pressTa5d6ff"Tb4b4b4, Te6edf3rowTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_get_row_checksTb4b4b4(Tb4b4b4) T8b949e# update the dict

Tff7b72def Td2a8ffset_default_first_rowTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3intervalTb4b4b4: Te6edf3UnionTb4b4b4[Tffa657intTb4b4b4, Tffa657floatTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Set default first row as selected."""

Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffrow_controllerTff7b72.Td2a8ffselect_nextTb4b4b4(Tff7b72selfTb4b4b4)

Tff7b72def Td2a8ffset_row_dataTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3data Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3low Tff7b72= T79c0ff0
Te6edf3high Tff7b72= Tff7b72selfTff7b72.Td2a8fftotal_col_headings Tff7b72- T79c0ff1
Tff7b72selfTff7b72.Td2a8ffrecycle_data Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffdata_first_cells Tff7b72= Tb4b4b4[Tb4b4b4]

Tff7b72if Tff7b72selfTff7b72.Td2a8ff_row_data_partsTb4b4b4:
T8b949e# for row in self.row_data:
Tff7b72for Te6edf3row Tff7b72in Tff7b72selfTff7b72.Td2a8ff_row_data_partsTb4b4b4[Tff7b72selfTff7b72.Td2a8ff_rows_numberTb4b4b4]Tb4b4b4:
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(Tffa657lenTb4b4b4(Te6edf3rowTb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3dataTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4[Te6edf3rowTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4, Te6edf3rowTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Tb4b4b4[Te6edf3lowTb4b4b4, Te6edf3highTb4b4b4]Tb4b4b4]Tb4b4b4)
Te6edf3low Tff7b72+Tff7b72= Tff7b72selfTff7b72.Td2a8fftotal_col_headings
Te6edf3high Tff7b72+Tff7b72= Tff7b72selfTff7b72.Td2a8fftotal_col_headings

Tff7b72for Te6edf3jTb4b4b4, Te6edf3x Tff7b72in Tffa657enumerateTb4b4b4(Te6edf3dataTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3xTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72== Te6edf3xTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdata_first_cellsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3xTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrecycle_dataTff7b72.Td2a8ffappendTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6fftextTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3xTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffIndexTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3jTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffrangeTa5d6ff"Tb4b4b4: Te6edf3xTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffselectableTa5d6ff"Tb4b4b4: Tff7b72TrueTb4b4b4,
Ta5d6ff"Ta5d6ffviewclassTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffCellRowTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fftableTa5d6ff"Tb4b4b4: Tff7b72selfTb4b4b4,
Ta5d6ff"Ta5d6ffbackground_color_cellTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ff_parentTff7b72.Td2a8ffbackground_color_cellTb4b4b4,
Ta5d6ff"Ta5d6ffbackground_color_selected_cellTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ff_parentTff7b72.Td2a8ffbackground_color_selected_cellTb4b4b4,
Tb4b4b4}
Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3r_data Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffIndexTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3jTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffrangeTa5d6ff"Tb4b4b4: Te6edf3xTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffselectableTa5d6ff"Tb4b4b4: Tff7b72TrueTb4b4b4,
Ta5d6ff"Ta5d6ffviewclassTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffCellRowTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fftableTa5d6ff"Tb4b4b4: Tff7b72selfTb4b4b4,
Ta5d6ff"Ta5d6ffbackground_color_cellTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ff_parentTff7b72.Td2a8ffbackground_color_cellTb4b4b4,
Ta5d6ff"Ta5d6ffbackground_color_selected_cellTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ff_parentTff7b72.Td2a8ffbackground_color_selected_cellTb4b4b4,
Tb4b4b4}

Tff7b72if Tb4b4b4(
Tffa657isinstanceTb4b4b4(Te6edf3xTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Tffa657tupleTb4b4b4) Tff7b72or Tffa657isinstanceTb4b4b4(Te6edf3xTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Tffa657listTb4b4b4)
Tb4b4b4) Tff7b72and Tffa657lenTb4b4b4(Te6edf3xTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4) Tff7b72== T79c0ff3Tb4b4b4:
Te6edf3r_dataTb4b4b4[Ta5d6ff"Ta5d6fficonTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3xTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3r_dataTb4b4b4[Ta5d6ff"Ta5d6fficon_colorTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3xTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3r_dataTb4b4b4[Ta5d6ff"Ta5d6fftextTa5d6ff"Tb4b4b4] Tff7b72= Tffa657strTb4b4b4(Te6edf3xTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrecycle_dataTff7b72.Td2a8ffappendTb4b4b4(Te6edf3r_dataTb4b4b4)

Tff7b72elif Tb4b4b4(
Tffa657isinstanceTb4b4b4(Te6edf3xTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Tffa657tupleTb4b4b4) Tff7b72or Tffa657isinstanceTb4b4b4(Te6edf3xTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Tffa657listTb4b4b4)
Tb4b4b4) Tff7b72and Tffa657lenTb4b4b4(Te6edf3xTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4) Tff7b72== T79c0ff2Tb4b4b4:
Te6edf3r_dataTb4b4b4[Ta5d6ff"Ta5d6fficonTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3xTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3r_dataTb4b4b4[Ta5d6ff"Ta5d6fftextTa5d6ff"Tb4b4b4] Tff7b72= Tffa657strTb4b4b4(Te6edf3xTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)

Tff7b72selfTff7b72.Td2a8ffrecycle_dataTff7b72.Td2a8ffappendTb4b4b4(Te6edf3r_dataTb4b4b4)

Tff7b72elseTb4b4b4:
Te6edf3r_dataTb4b4b4[Ta5d6ff"Ta5d6fftextTa5d6ff"Tb4b4b4] Tff7b72= Tffa657strTb4b4b4(Te6edf3xTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrecycle_dataTff7b72.Td2a8ffappendTb4b4b4(Te6edf3r_dataTb4b4b4)

Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8fftable_headerTff7b72.Td2a8ffcolumn_dataTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffSet value for column_data in class TableDataTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdata_first_cellsTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8fftable_headerTff7b72.Td2a8ffcolumn_dataTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)

Tff7b72def Td2a8ffset_text_from_ofTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3directionTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Sets the text of the numbers of displayed pages in table."""

Tff7b72if Tff7b72selfTff7b72.Td2a8ffpaginationTb4b4b4:
Tff7b72if Te6edf3direction Tff7b72== Ta5d6ff"Ta5d6ffresetTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_current_value Tff7b72= T79c0ff1
Tff7b72selfTff7b72.Td2a8ff_to_value Tff7b72= Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_row_data_partsTb4b4b4[Tff7b72selfTff7b72.Td2a8ff_rows_numberTb4b4b4]Tb4b4b4)
Tff7b72elif Te6edf3direction Tff7b72== Ta5d6ff"Ta5d6ffforwardTa5d6ff"Tb4b4b4:
Tff7b72if Tb4b4b4(
Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_row_data_partsTb4b4b4[Tff7b72selfTff7b72.Td2a8ff_rows_numberTb4b4b4]Tb4b4b4)
Tff7b72< Tff7b72selfTff7b72.Td2a8ff_to_value
Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_current_value Tff7b72= Tff7b72selfTff7b72.Td2a8ff_current_value Tff7b72+ Tff7b72selfTff7b72.Td2a8ffrows_num
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_current_value Tff7b72= Tff7b72selfTff7b72.Td2a8ff_current_value Tff7b72+ Tffa657lenTb4b4b4(
Tff7b72selfTff7b72.Td2a8ff_row_data_partsTb4b4b4[Tff7b72selfTff7b72.Td2a8ff_rows_numberTb4b4b4]
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_to_value Tff7b72= Tff7b72selfTff7b72.Td2a8ff_to_value Tff7b72+ Tffa657lenTb4b4b4(
Tff7b72selfTff7b72.Td2a8ff_row_data_partsTb4b4b4[Tff7b72selfTff7b72.Td2a8ff_rows_numberTb4b4b4]
Tb4b4b4)
Tff7b72if Te6edf3direction Tff7b72== Ta5d6ff"Ta5d6ffbackTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_current_value Tff7b72= Tff7b72selfTff7b72.Td2a8ff_current_value Tff7b72- Tffa657lenTb4b4b4(
Tff7b72selfTff7b72.Td2a8ff_row_data_partsTb4b4b4[Tff7b72selfTff7b72.Td2a8ff_rows_numberTb4b4b4]
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_to_value Tff7b72= Tff7b72selfTff7b72.Td2a8ff_to_value Tff7b72- Tffa657lenTb4b4b4(
Tff7b72selfTff7b72.Td2a8ff_row_data_partsTb4b4b4[Tff7b72selfTff7b72.Td2a8ff_rows_number Tff7b72+ T79c0ff1Tb4b4b4]
Tb4b4b4)
Tff7b72if Te6edf3direction Tff7b72== Ta5d6ff"Ta5d6ffincrementTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_current_value Tff7b72= T79c0ff1
Tff7b72selfTff7b72.Td2a8ff_to_value Tff7b72= Tff7b72selfTff7b72.Td2a8ffrows_num Tff7b72+ Tff7b72selfTff7b72.Td2a8ff_current_value Tff7b72- T79c0ff1

Tff7b72selfTff7b72.Td2a8ffpaginationTff7b72.Td2a8ffidsTff7b72.Td2a8fflabel_rows_per_pageTff7b72.Td2a8fftext Tff7b72= Tb4b4b4(
Ta5d6fffTa5d6ff"Tffd700{Tff7b72selfTff7b72.Td2a8ff_current_valueTffd700}Ta5d6ff-Tffd700{Tff7b72selfTff7b72.Td2a8ff_to_valueTffd700}Ta5d6ff Ta5d6ff"
Ta5d6fffTa5d6ff"Ta5d6ffof Tffd700{Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrow_dataTb4b4b4)Tffd700}Ta5d6ff"
Tb4b4b4)

Tff7b72def Td2a8ffselect_allTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3stateTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Sets the checkboxes of all rows to the active/inactive position."""

Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(T79c0ff0Tb4b4b4, Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrecycle_dataTb4b4b4)Tb4b4b4, Tff7b72selfTff7b72.Td2a8fftotal_col_headingsTb4b4b4)Tb4b4b4:
Te6edf3cell_row_obj Tff7b72= Tff7b72selfTff7b72.Td2a8ffview_adapterTff7b72.Td2a8ffget_visible_viewTb4b4b4(Te6edf3iTb4b4b4)
Tff7b72if Te6edf3cell_row_objTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcell_row_obj_dictTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3cell_row_obj
Tff7b72selfTff7b72.Td2a8ffon_mouse_selectTb4b4b4(Te6edf3cell_row_objTb4b4b4)
Te6edf3cell_row_objTff7b72.Td2a8ffidsTff7b72.Td2a8ffcheckTff7b72.Td2a8ffstate Tff7b72= Te6edf3state

Tff7b72if Te6edf3state Tff7b72== Ta5d6ff"Ta5d6ffdownTa5d6ff"Tb4b4b4:
T8b949e# select all checks on all pages
Te6edf3rows_num Tff7b72= Tff7b72selfTff7b72.Td2a8ffrows_num
Te6edf3columns Tff7b72= Tff7b72selfTff7b72.Td2a8fftotal_col_headings
Te6edf3full_pages Tff7b72= Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrow_dataTb4b4b4) Tff7b72/Tff7b72/ Tff7b72selfTff7b72.Td2a8ffrows_num
Te6edf3left_over_rows Tff7b72= Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrow_dataTb4b4b4) Tff7b72% Tff7b72selfTff7b72.Td2a8ffrows_num

Te6edf3new_checks Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72for Te6edf3page Tff7b72in Tffa657rangeTb4b4b4(Te6edf3full_pagesTb4b4b4)Tb4b4b4:
Te6edf3new_checksTb4b4b4[Te6edf3pageTb4b4b4] Tff7b72= Tffa657listTb4b4b4(Tffa657rangeTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3rows_num Tff7b72* Te6edf3columnsTb4b4b4, Te6edf3columnsTb4b4b4)Tb4b4b4)

Tff7b72if Te6edf3left_over_rowsTb4b4b4:
Te6edf3new_checksTb4b4b4[Te6edf3full_pagesTb4b4b4] Tff7b72= Tffa657listTb4b4b4(
Tffa657rangeTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3left_over_rows Tff7b72* Te6edf3columnsTb4b4b4, Te6edf3columnsTb4b4b4)
Tb4b4b4)

Tff7b72selfTff7b72.Td2a8ffcurrent_selection_check Tff7b72= Te6edf3new_checks
Tff7b72return

T8b949e# resets all checks on all pages
Tff7b72selfTff7b72.Td2a8ffcurrent_selection_check Tff7b72= Tb4b4b4{Tb4b4b4}

Tff7b72def Td2a8ffcheck_allTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3stateTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
T8b949e"""Checks if checkboxes of all rows are in the same state."""

Te6edf3tmp Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(T79c0ff0Tb4b4b4, Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrecycle_dataTb4b4b4)Tb4b4b4, Tff7b72selfTff7b72.Td2a8fftotal_col_headingsTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffcell_row_obj_dictTff7b72.Td2a8ffgetTb4b4b4(Te6edf3iTb4b4b4, Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3cell_row_obj Tff7b72= Tff7b72selfTff7b72.Td2a8ffcell_row_obj_dictTb4b4b4[Te6edf3iTb4b4b4]
Tff7b72elseTb4b4b4:
Te6edf3cell_row_obj Tff7b72= Tff7b72selfTff7b72.Td2a8ffview_adapterTff7b72.Td2a8ffget_visible_viewTb4b4b4(Te6edf3iTb4b4b4)
Tff7b72if Te6edf3cell_row_objTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcell_row_obj_dictTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3cell_row_obj
Tff7b72if Te6edf3cell_row_objTb4b4b4:
Te6edf3tmpTff7b72.Td2a8ffappendTb4b4b4(Te6edf3cell_row_objTff7b72.Td2a8ffidsTff7b72.Td2a8ffcheckTff7b72.Td2a8ffstate Tff7b72== Te6edf3stateTb4b4b4)
Tff7b72return Tffa657allTb4b4b4(Te6edf3tmpTb4b4b4)

Tff7b72def Td2a8ffclose_pagination_menuTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Called when the pagination menu window is closed."""

Tff7b72selfTff7b72.Td2a8ffpagination_menu_open Tff7b72= Tff7b72False

Tff7b72def Td2a8ffopen_pagination_menuTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Open pagination menu window."""

Tff7b72if Tff7b72selfTff7b72.Td2a8ffpagination_menuTff7b72.Td2a8ffitemsTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffpagination_menu_open Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffpagination_menuTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffset_number_displayed_linesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3text_itemTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""
Called when the user sets the number of pages displayed
in the table.
"""

T8b949e# self.rows_num = int(text_item)
Tff7b72selfTff7b72.Td2a8ffrows_num Tff7b72= Tffa657intTb4b4b4(Te6edf3text_itemTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffset_next_row_data_partsTb4b4b4(Ta5d6ff"Ta5d6ffresetTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffset_text_from_ofTb4b4b4(Ta5d6ff"Ta5d6ffresetTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffpagination_menuTff7b72.Td2a8ffcallerTff7b72.Td2a8fftext Tff7b72= Te6edf3text_item

Tff7b72def Td2a8ffset_next_row_data_partsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3directionTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Called when switching the pages of the table."""

Tff7b72if Te6edf3direction Tff7b72== Ta5d6ff"Ta5d6ffresetTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_rows_number Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffpaginationTff7b72.Td2a8ffidsTff7b72.Td2a8ffbutton_backTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffpaginationTff7b72.Td2a8ffidsTff7b72.Td2a8ffbutton_forwardTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72False
Tff7b72elif Te6edf3direction Tff7b72== Ta5d6ff"Ta5d6ffforwardTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_rows_number Tff7b72+Tff7b72= T79c0ff1
Tff7b72selfTff7b72.Td2a8ffpaginationTff7b72.Td2a8ffidsTff7b72.Td2a8ffbutton_backTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72False
Tff7b72elif Te6edf3direction Tff7b72== Ta5d6ff"Ta5d6ffbackTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_rows_number Tff7b72-Tff7b72= T79c0ff1
Tff7b72selfTff7b72.Td2a8ffpaginationTff7b72.Td2a8ffidsTff7b72.Td2a8ffbutton_forwardTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72False

Tff7b72selfTff7b72.Td2a8ffset_row_dataTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffset_text_from_ofTb4b4b4(Te6edf3directionTb4b4b4)

Tff7b72if Tff7b72selfTff7b72.Td2a8ff_to_value Tff7b72== Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrow_dataTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffpaginationTff7b72.Td2a8ffidsTff7b72.Td2a8ffbutton_forwardTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_current_value Tff7b72== T79c0ff1Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffpaginationTff7b72.Td2a8ffidsTff7b72.Td2a8ffbutton_backTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True

Tff7b72def Td2a8ffon_mouse_selectTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3instance_cell_rowTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Called on the ``on_enter`` event of the :class:`~CellRow` class."""

Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffpagination_menu_openTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffrow_controllerTff7b72.Td2a8ffselected_row Tff7b72!= Te6edf3instance_cell_rowTff7b72.Td2a8ffindexTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffrow_controllerTff7b72.Td2a8ffselected_row Tff7b72= Te6edf3instance_cell_rowTff7b72.Td2a8ffindex
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffrow_controllerTff7b72.Td2a8ffselect_currentTb4b4b4(Tff7b72selfTb4b4b4)

Tff7b72def Td2a8ffon_rows_numTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3instance_table_dateTb4b4b4, Te6edf3value_rows_numTb4b4b4: Tffa657intTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_to_valueTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_to_value Tff7b72= Te6edf3value_rows_num

Tff7b72selfTff7b72.Td2a8ff_rows_number Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ff_row_data_parts Tff7b72= Tffa657listTb4b4b4(
Tff7b72selfTff7b72.Td2a8ff_split_list_into_equal_partsTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrow_dataTb4b4b4, Te6edf3value_rows_numTb4b4b4)
Tb4b4b4)

Tff7b72def Td2a8ffon_paginationTb4b4b4(
Tff7b72selfTb4b4b4, Te6edf3instance_table_dateTb4b4b4, Te6edf3instance_table_pagination
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_to_value Tff7b72< Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrow_dataTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffpaginationTff7b72.Td2a8ffidsTff7b72.Td2a8ffbutton_forwardTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72False

Tff7b72def Td2a8ff_split_list_into_equal_partsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3lstTb4b4b4, Te6edf3partsTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(T79c0ff0Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3lstTb4b4b4)Tb4b4b4, Te6edf3partsTb4b4b4)Tb4b4b4:
Tff7b72yield Te6edf3lstTb4b4b4[Te6edf3i Tb4b4b4: Te6edf3i Tff7b72+ Te6edf3partsTb4b4b4]

Tff7b72def Td2a8ff_get_row_checksTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Returns all rows that are checked."""

Te6edf3tmp Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(T79c0ff0Tb4b4b4, Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrecycle_dataTb4b4b4)Tb4b4b4, Tff7b72selfTff7b72.Td2a8fftotal_col_headingsTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffcell_row_obj_dictTff7b72.Td2a8ffgetTb4b4b4(Te6edf3iTb4b4b4, Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3cell_row_obj Tff7b72= Tff7b72selfTff7b72.Td2a8ffcell_row_obj_dictTb4b4b4[Te6edf3iTb4b4b4]
Tff7b72elseTb4b4b4:
Te6edf3cell_row_obj Tff7b72= Tff7b72selfTff7b72.Td2a8ffview_adapterTff7b72.Td2a8ffget_visible_viewTb4b4b4(Te6edf3iTb4b4b4)
Tff7b72if Te6edf3cell_row_objTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcell_row_obj_dictTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3cell_row_obj

Tff7b72if Te6edf3cell_row_obj Tff7b72and Te6edf3cell_row_objTff7b72.Td2a8ffidsTff7b72.Td2a8ffcheckTff7b72.Td2a8ffstate Tff7b72== Ta5d6ff"Ta5d6ffdownTa5d6ff"Tb4b4b4:
Te6edf3idx Tff7b72= Te6edf3cell_row_objTff7b72.Td2a8ffindex
Te6edf3row Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3data Tff7b72in Tff7b72selfTff7b72.Td2a8ffrecycle_dataTb4b4b4:
Tff7b72if Te6edf3idx Tff7b72in Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffrangeTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3rowTff7b72.Td2a8ffappendTb4b4b4(Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6fftextTa5d6ff"Tb4b4b4]Tb4b4b4)

Te6edf3tmpTff7b72.Td2a8ffappendTb4b4b4(Te6edf3rowTb4b4b4)
Tff7b72return Te6edf3tmp

T8b949e# def on_pagination(self, instance_table, instance_pagination):
T8b949e# if len(self._row_data_parts) <= self._to_value:
T8b949e# instance_pagination.ids.button_forward.disabled = True


Tff7b72class T56d364TablePaginationTb4b4b4(Te6edf3MDBoxLayoutTb4b4b4)Tb4b4b4:
T8b949e"""Pagination Container."""

Te6edf3table_data Tff7b72= Te6edf3ObjectPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
:class:`~TableData` class.

:attr:`table_data` is an :class:`~kivy.properties.ObjectProperty`
and defaults to `None`.
"""


Tff7b72class T56d364MDDataTableTb4b4b4(Te6edf3ThemableBehaviorTb4b4b4, Te6edf3AnchorLayoutTb4b4b4)Tb4b4b4:
T8b949e"""
Datatable class.

For more information, see in the
:class:`~kivymd.theming.ThemableBehavior` and
:class:`~kivy.uix.anchorlayout.AnchorLayout` classes documentation.

:Events:
:attr:`on_row_press`
Called when a table row is clicked.
:attr:`on_check_press`
Called when the check box in the table row is checked.

.. rubric:: Use events as follows

.. code-block:: python

from kivy.metrics import dp

from kivymd.app import MDApp
from kivymd.uix.datatables import MDDataTable
from kivymd.uix.screen import MDScreen


class Example(MDApp):
def build(self):
self.data_tables = MDDataTable(
use_pagination=True,
check=True,
column_data=[
("No.", dp(30)),
("Status", dp(30)),
("Signal Name", dp(60), self.sort_on_signal),
("Severity", dp(30)),
("Stage", dp(30)),
("Schedule", dp(30), self.sort_on_schedule),
("Team Lead", dp(30), self.sort_on_team),
],
row_data=[
(
"1",
("alert", [255 / 256, 165 / 256, 0, 1], "No Signal"),
"Astrid: NE shared managed",
"Medium",
"Triaged",
"0:33",
"Chase Nguyen",
),
(
"2",
("alert-circle", [1, 0, 0, 1], "Offline"),
"Cosmo: prod shared ares",
"Huge",
"Triaged",
"0:39",
"Brie Furman",
),
(
"3",
(
"checkbox-marked-circle",
[39 / 256, 174 / 256, 96 / 256, 1],
"Online",
),
"Phoenix: prod shared lyra-lists",
"Minor",
"Not Triaged",
"3:12",
"Jeremy lake",
),
(
"4",
(
"checkbox-marked-circle",
[39 / 256, 174 / 256, 96 / 256, 1],
"Online",
),
"Sirius: NW prod shared locations",
"Negligible",
"Triaged",
"13:18",
"Angelica Howards",
),
(
"5",
(
"checkbox-marked-circle",
[39 / 256, 174 / 256, 96 / 256, 1],
"Online",
),
"Sirius: prod independent account",
"Negligible",
"Triaged",
"22:06",
"Diane Okuma",
),
],
sorted_on="Schedule",
sorted_order="ASC",
elevation=2,
)
self.data_tables.bind(on_row_press=self.on_row_press)
self.data_tables.bind(on_check_press=self.on_check_press)
screen = MDScreen()
screen.add_widget(self.data_tables)
return screen

def on_row_press(self, instance_table, instance_row):
'''Called when a table row is clicked.'''

print(instance_table, instance_row)

def on_check_press(self, instance_table, current_row):
'''Called when the check box in the table row is checked.'''

print(instance_table, current_row)

# Sorting Methods:
# since the https://github.com/kivymd/KivyMD/pull/914 request, the
# sorting method requires you to sort out the indexes of each data value
# for the support of selections.
#
# The most common method to do this is with the use of the builtin function
# zip and enumerate, see the example below for more info.
#
# The result given by these funcitons must be a list in the format of
# [Indexes, Sorted_Row_Data]

def sort_on_signal(self, data):
return zip(*sorted(enumerate(data), key=lambda l: l[1][2]))

def sort_on_schedule(self, data):
return zip(
*sorted(
enumerate(data),
key=lambda l: sum(
[
int(l[1][-2].split(":")[0]) * 60,
int(l[1][-2].split(":")[1]),
]
),
)
)

def sort_on_team(self, data):
return zip(*sorted(enumerate(data), key=lambda l: l[1][-1]))


Example().run()
"""

Te6edf3column_data Tff7b72= Te6edf3ListPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
Data for header columns.

.. tabs::

.. tab:: Imperative python style

.. code-block:: python

from kivy.metrics import dp

from kivymd.app import MDApp
from kivymd.uix.datatables import MDDataTable
from kivy.uix.anchorlayout import AnchorLayout


class Example(MDApp):
def build(self):
self.theme_cls.theme_style = "Dark"
self.theme_cls.primary_palette = "Orange"

layout = AnchorLayout()
self.data_tables = MDDataTable(
size_hint=(0.7, 0.6),
use_pagination=True,
check=True,
# name column, width column, sorting function column(optional), custom tooltip
column_data=[
("No.", dp(30), None, "Custom tooltip"),
("Status", dp(30)),
("Signal Name", dp(60)),
("Severity", dp(30)),
("Stage", dp(30)),
("Schedule", dp(30), lambda *args: print("Sorted using Schedule")),
("Team Lead", dp(30)),
],
)
layout.add_widget(self.data_tables)
return layout


Example().run()

.. tab:: Declarative python style

.. code-block:: python

from kivy.metrics import dp

from kivymd.app import MDApp
from kivymd.uix.anchorlayout import MDAnchorLayout
from kivymd.uix.datatables import MDDataTable


class Example(MDApp):
def build(self):
self.theme_cls.theme_style = "Dark"
self.theme_cls.primary_palette = "Orange"
return MDAnchorLayout(
MDDataTable(
size_hint=(0.7, 0.6),
use_pagination=True,
check=True,
# name column, width column, sorting function column(optional)
column_data=[
("No.", dp(30)),
("Status", dp(30)),
("Signal Name", dp(60)),
("Severity", dp(30)),
("Stage", dp(30)),
("Schedule", dp(30),
lambda *args: print("Sorted using Schedule")),
("Team Lead", dp(30)),
],
)
)


Example().run()

.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/data-tables-column-data.png
:align: center

:attr:`column_data` is an :class:`~kivy.properties.ListProperty`
and defaults to `[]`.

.. note:: The functions which will be called for sorting must accept a data
argument and return the sorted data. Incoming data format will be
similar to the provided row_data except that it'll be all list instead
of tuple like below. Any icon provided initially will also be there in
this data so handle accordingly.

.. code-block:: python

[
[
"1",
["icon", "No Signal"],
"Astrid: NE shared managed",
"Medium",
"Triaged",
"0:33",
"Chase Nguyen",
],
[
"2",
"Offline",
"Cosmo: prod shared ares",
"Huge",
"Triaged",
"0:39",
"Brie Furman",
],
[
"3",
"Online",
"Phoenix: prod shared lyra-lists",
"Minor",
"Not Triaged",
"3:12",
"Jeremy lake",
],
[
"4",
"Online",
"Sirius: NW prod shared locations",
"Negligible",
"Triaged",
"13:18",
"Angelica Howards",
],
[
"5",
"Online",
"Sirius: prod independent account",
"Negligible",
"Triaged",
"22:06",
"Diane Okuma",
],
]

You must sort inner lists in ascending order and return the sorted data
in the same format.
"""

Te6edf3row_data Tff7b72= Te6edf3ListPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
Data for rows. To add icon in addition to a row data, include a tuple with
This property stores the row data used to display each row in the DataTable
To show an icon inside a column in a row, use the folowing format in the
row's columns.

Format:

`("MDicon-name", [icon color in rgba], "Column Value")`

Example:

.. code-block:: python
[...]
row_data = [

# row 1
[
"value 1",
"value 2",
# the third value will have an icon inside the box
["home", [128/255, 48/255, 76/255, 1], "Offie" ]
],

# row 2
[
"value 1",
"value 2",
# the third value will have an icon inside the box
["git", [1, 0.1, 0.1, 1], "Git Repo" ]
]
]

For a more complex example see below.

.. code-block:: python

from kivy.metrics import dp
from kivy.uix.anchorlayout import AnchorLayout

from kivymd.app import MDApp
from kivymd.uix.datatables import MDDataTable


class Example(MDApp):
def build(self):
self.theme_cls.theme_style = "Dark"
self.theme_cls.primary_palette = "Orange"

layout = AnchorLayout()
data_tables = MDDataTable(
size_hint=(0.9, 0.6),
column_data=[
("Column 1", dp(20)),
("Column 2", dp(30)),
("Column 3", dp(50), self.sort_on_col_3),
("Column 4", dp(30)),
("Column 5", dp(30)),
("Column 6", dp(30)),
("Column 7", dp(30), self.sort_on_col_2),
],
row_data=[
# The number of elements must match the length
# of the `column_data` list.
(
"1",
("alert", [255 / 256, 165 / 256, 0, 1], "No Signal"),
"Astrid: NE shared managed",
"Medium",
"Triaged",
"0:33",
"Chase Nguyen",
),
(
"2",
("alert-circle", [1, 0, 0, 1], "Offline"),
"Cosmo: prod shared ares",
"Huge",
"Triaged",
"0:39",
"Brie Furman",
),
(
"3",
(
"checkbox-marked-circle",
[39 / 256, 174 / 256, 96 / 256, 1],
"Online",
),
"Phoenix: prod shared lyra-lists",
"Minor",
"Not Triaged",
"3:12",
"Jeremy lake",
),
(
"4",
(
"checkbox-marked-circle",
[39 / 256, 174 / 256, 96 / 256, 1],
"Online",
),
"Sirius: NW prod shared locations",
"Negligible",
"Triaged",
"13:18",
"Angelica Howards",
),
(
"5",
(
"checkbox-marked-circle",
[39 / 256, 174 / 256, 96 / 256, 1],
"Online",
),
"Sirius: prod independent account",
"Negligible",
"Triaged",
"22:06",
"Diane Okuma",
),
],
)
layout.add_widget(data_tables)
return layout

def sort_on_col_3(self, data):
return zip(
*sorted(
enumerate(data),
key=lambda l: l[1][3]
)
)

def sort_on_col_2(self, data):
return zip(
*sorted(
enumerate(data),
key=lambda l: l[1][-1]
)
)

Example().run()


.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/data-tables-row-data.png
:align: center

:attr:`row_data` is an :class:`~kivy.properties.ListProperty`
and defaults to `[]`.
"""

Te6edf3sorted_on Tff7b72= Te6edf3StringPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
Column name upon which the data is already sorted.

If the table data is showing an already sorted data then this can be used
to indicate upon which column the data is sorted.

:attr:`sorted_on` is an :class:`~kivy.properties.StringProperty`
and defaults to `''`.
"""

Te6edf3sorted_order Tff7b72= Te6edf3OptionPropertyTb4b4b4(Ta5d6ff"Ta5d6ffASCTa5d6ff"Tb4b4b4, Te6edf3optionsTff7b72=Tb4b4b4[Ta5d6ff"Ta5d6ffASCTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffDSCTa5d6ff"Tb4b4b4]Tb4b4b4)
T8b949e"""
Order of already sorted data. Must be one of `'ASC'` for ascending or
`'DSC'` for descending order.

:attr:`sorted_order` is an :class:`~kivy.properties.OptionProperty`
and defaults to `'ASC'`.
"""

Te6edf3check Tff7b72= Te6edf3BooleanPropertyTb4b4b4(Tff7b72FalseTb4b4b4)
T8b949e"""
Use or not use checkboxes for rows.

.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/data-tables-check.png
:align: center

:attr:`check` is an :class:`~kivy.properties.BooleanProperty`
and defaults to `False`.
"""

Te6edf3use_pagination Tff7b72= Te6edf3BooleanPropertyTb4b4b4(Tff7b72FalseTb4b4b4)
T8b949e"""
Use page pagination for table or not.

.. code-block:: python

from kivy.metrics import dp
from kivy.uix.anchorlayout import AnchorLayout

from kivymd.app import MDApp
from kivymd.uix.datatables import MDDataTable


class Example(MDApp):
def build(self):
self.theme_cls.theme_style = "Dark"
self.theme_cls.primary_palette = "Orange"

layout = AnchorLayout()
data_tables = MDDataTable(
size_hint=(0.9, 0.6),
use_pagination=True,
column_data=[
("No.", dp(30)),
("Column 1", dp(30)),
("Column 2", dp(30)),
("Column 3", dp(30)),
("Column 4", dp(30)),
("Column 5", dp(30)),
],
row_data=[
(f"{i + 1}", "1", "2", "3", "4", "5") for i in range(50)
],
)
layout.add_widget(data_tables)
return layout


Example().run()

.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/data-tables-use-pagination.png
:align: center

:attr:`use_pagination` is an :class:`~kivy.properties.BooleanProperty`
and defaults to `False`.
"""

Te6edf3elevation Tff7b72= Te6edf3NumericPropertyTb4b4b4(Te6edf3DATA_TABLE_ELEVATIONTb4b4b4)
T8b949e"""
See :attr:`kivymd.uix.behaviors.elevation.CommonElevationBehavior.elevation`
attribute.

:attr:`elevation` is an :class:`~kivy.properties.NumericProperty`
and defaults to `4`.
"""

Te6edf3shadow_radius Tff7b72= Te6edf3VariableListPropertyTb4b4b4(Tb4b4b4[T79c0ff6Tb4b4b4]Tb4b4b4, Te6edf3lengthTff7b72=T79c0ff4Tb4b4b4)
T8b949e"""
See :attr:`kivymd.uix.behaviors.elevation.CommonElevationBehavior.shadow_radius`
attribute.

.. versionadded:: 1.2.0

:attr:`shadow_radius` is an :class:`~kivy.properties.VariableListProperty`
and defaults to `[6]`.
"""

Te6edf3shadow_softness Tff7b72= Te6edf3NumericPropertyTb4b4b4(Te6edf3DATA_TABLE_SOFTNESSTb4b4b4)
T8b949e"""
See :attr:`kivymd.uix.behaviors.elevation.CommonElevationBehavior.shadow_softness`
attribute.

.. versionadded:: 1.2.0

:attr:`shadow_softness` is an :class:`~kivy.properties.NumericProperty`
and defaults to `12`.
"""

Te6edf3shadow_softness_size Tff7b72= Te6edf3BoundedNumericPropertyTb4b4b4(T79c0ff2Tb4b4b4, Tffa657minTff7b72=T79c0ff2Tb4b4b4)
T8b949e"""
See :attr:`kivymd.uix.behaviors.elevation.CommonElevationBehavior.shadow_softness_size`
attribute.

.. versionadded:: 1.2.0

:attr:`shadow_softness_size` is an :class:`~kivy.properties.BoundedNumericProperty`
and defaults to `2`.
"""

Te6edf3shadow_offset Tff7b72= Te6edf3ListPropertyTb4b4b4(Te6edf3DATA_TABLE_OFFSETTb4b4b4)
T8b949e"""
See :attr:`kivymd.uix.behaviors.elevation.CommonElevationBehavior.shadow_offset`
attribute.

.. versionadded:: 1.2.0

:attr:`shadow_offset` is an :class:`~kivy.properties.ListProperty`
and defaults to `(0, 2)`.
"""

Te6edf3shadow_color Tff7b72= Te6edf3ColorPropertyTb4b4b4(Tb4b4b4[T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0.6Tb4b4b4]Tb4b4b4)
T8b949e"""
See :attr:`kivymd.uix.behaviors.elevation.CommonElevationBehavior.shadow_color`
attribute.

.. versionadded:: 1.2.0

:attr:`shadow_color` is an :class:`~kivy.properties.ColorProperty`
and defaults to `[0, 0, 0, 0.6]`.
"""

Te6edf3rows_num Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff5Tb4b4b4)
T8b949e"""
The number of rows displayed on one page of the table.

.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/data-tables-use-pagination-rows-num.png
:align: center

:attr:`rows_num` is an :class:`~kivy.properties.NumericProperty`
and defaults to `10`.
"""

Te6edf3pagination_menu_pos Tff7b72= Te6edf3OptionPropertyTb4b4b4(
Ta5d6ff"Ta5d6fftopTa5d6ff"Tb4b4b4, Te6edf3optionsTff7b72=Tb4b4b4[Ta5d6ff"Ta5d6ffcenterTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffautoTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fftopTa5d6ff"Tb4b4b4]
Tb4b4b4)
T8b949e"""
Menu position for selecting the number of displayed rows.
Available options are `'center'`, `'auto'`.

.. rubric:: Center

.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/data-tables-menu-pos-top.png
:align: center

.. rubric:: Auto

.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/data-tables-menu-pos-auto.png
:align: center

:attr:`pagination_menu_pos` is an :class:`~kivy.properties.OptionProperty`
and defaults to `'center'`.
"""

Te6edf3pagination_menu_height Tff7b72= Te6edf3NumericPropertyTb4b4b4(Ta5d6ff"Ta5d6ff140dpTa5d6ff"Tb4b4b4)
T8b949e"""
Menu height for selecting the number of displayed rows.

.. rubric:: 240dp

.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/data-tables-menu-height-240.png
:align: center

:attr:`pagination_menu_height` is an :class:`~kivy.properties.NumericProperty`
and defaults to `'140dp'`.
"""

Te6edf3background_color Tff7b72= Te6edf3ColorPropertyTb4b4b4(Tb4b4b4[T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4]Tb4b4b4)
T8b949e"""
Background color in the format (r, g, b, a) or string format.
See :attr:`~kivy.uix.modalview.ModalView.background_color`.

Use markup strings
------------------

.. code-block:: python

from kivy.metrics import dp
from kivy.uix.anchorlayout import AnchorLayout

from kivymd.app import MDApp
from kivymd.uix.datatables import MDDataTable


class Example(MDApp):
def build(self):
self.theme_cls.theme_style = "Dark"
self.theme_cls.primary_palette = "Orange"

layout = AnchorLayout()
data_tables = MDDataTable(
size_hint=(0.9, 0.6),
use_pagination=True,
column_data=[
("No.", dp(30)),
("Column 1", dp(30)),
("[color=#52251B]Column 2[/color]", dp(30)),
("Column 3", dp(30)),
("[size=24][color=#C042B8]Column 4[/color][/size]", dp(30)),
("Column 5", dp(30)),
],
row_data=[
(
f"{i + 1}",
"[color=#297B50]1[/color]",
"[color=#C552A1]2[/color]",
"[color=#6C9331]3[/color]",
"4",
"5",
)
for i in range(50)
],
)
layout.add_widget(data_tables)
return layout


Example().run()

.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/datatables-use-markup-strings.png
:align: center

:attr:`background_color` is a :class:`~kivy.properties.ColorProperty` and
defaults to `[0, 0, 0, 0]`.
"""

Te6edf3background_color_header Tff7b72= Te6edf3ColorPropertyTb4b4b4(Tff7b72NoneTb4b4b4)
T8b949e"""
Background color in the format (r, g, b, a) or string format for
:class:`~TableHeader` class.

.. versionadded:: 1.0.0

.. code-block:: python

self.data_tables = MDDataTable(
...,
background_color_header="#65275d",
)

.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/data-tables-background-color-header.png
:align: center

:attr:`background_color_header` is a :class:`~kivy.properties.ColorProperty` and
defaults to `None`.
"""

Te6edf3background_color_cell Tff7b72= Te6edf3ColorPropertyTb4b4b4(Tff7b72NoneTb4b4b4)
T8b949e"""
Background color in the format (r, g, b, a) or string format for
:class:`~CellRow` class.

.. versionadded:: 1.0.0

.. code-block:: python

self.data_tables = MDDataTable(
...,
background_color_header="#65275d",
background_color_cell="#451938",
)

.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/data-tables-background-color-cell.png
:align: center

:attr:`background_color_cell` is a :class:`~kivy.properties.ColorProperty`
and defaults to `None`.
"""

Te6edf3background_color_selected_cell Tff7b72= Te6edf3ColorPropertyTb4b4b4(Tff7b72NoneTb4b4b4)
T8b949e"""
Background selected color in the format (r, g, b, a) or string format for
:class:`~CellRow` class.

.. versionadded:: 1.0.0

.. code-block:: python

self.data_tables = MDDataTable(
...,
background_color_header="#65275d",
background_color_cell="#451938",
background_color_selected_cell="e4514f",
)

.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/data-tables-background-color-selected-cell.png
:align: center

:attr:`background_color_selected_cell` is a :class:`~kivy.properties.ColorProperty` and
defaults to `None`.
"""

Te6edf3effect_cls Tff7b72= Te6edf3ObjectPropertyTb4b4b4(Te6edf3StiffScrollEffectTb4b4b4)
T8b949e"""
Effect class. See ``kivy/effects`` package for more information.

.. versionadded:: 1.0.0

:attr:`effect_cls` is an :class:`~kivy.properties.ObjectProperty`
and defaults to :class:`~kivymd.effects.stiffscroll.StiffScrollEffect`.
"""

Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffheader Tff7b72= Te6edf3TableHeaderTb4b4b4(
Te6edf3column_dataTff7b72=Tff7b72selfTff7b72.Td2a8ffcolumn_dataTb4b4b4,
Te6edf3sorted_onTff7b72=Tff7b72selfTff7b72.Td2a8ffsorted_onTb4b4b4,
Te6edf3sorted_orderTff7b72=Tff7b72selfTff7b72.Td2a8ffsorted_orderTb4b4b4,
Te6edf3background_color_headerTff7b72=Tff7b72selfTff7b72.Td2a8ffbackground_color_headerTb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fftable_data Tff7b72= Te6edf3TableDataTb4b4b4(
Tff7b72selfTff7b72.Td2a8ffheaderTb4b4b4,
Te6edf3row_dataTff7b72=Tff7b72selfTff7b72.Td2a8ffrow_dataTb4b4b4,
Te6edf3checkTff7b72=Tff7b72selfTff7b72.Td2a8ffcheckTb4b4b4,
Te6edf3rows_numTff7b72=Tff7b72selfTff7b72.Td2a8ffrows_numTb4b4b4,
Te6edf3_parentTff7b72=Tff7b72selfTb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffregister_event_typeTb4b4b4(Ta5d6ff"Ta5d6ffon_row_pressTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffregister_event_typeTb4b4b4(Ta5d6ff"Ta5d6ffon_check_pressTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffpagination Tff7b72= Te6edf3TablePaginationTb4b4b4(Te6edf3table_dataTff7b72=Tff7b72selfTff7b72.Td2a8fftable_dataTb4b4b4)
Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ffpagination Tff7b72= Tff7b72selfTff7b72.Td2a8ffpagination
Tff7b72selfTff7b72.Td2a8ffheaderTff7b72.Td2a8fftable_data Tff7b72= Tff7b72selfTff7b72.Td2a8fftable_data
Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8fffbindTb4b4b4(Ta5d6ff"Ta5d6ffscroll_xTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ff_scroll_with_headerTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffcontainerTff7b72.Td2a8ffadd_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ffheaderTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffcontainerTff7b72.Td2a8ffadd_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8fftable_dataTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffuse_paginationTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffcontainerTff7b72.Td2a8ffadd_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ffpaginationTb4b4b4)
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcreate_pagination_menuTb4b4b4, T79c0ff0.5Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbindTb4b4b4(Te6edf3row_dataTff7b72=Tff7b72selfTff7b72.Td2a8ffupdate_row_dataTb4b4b4)

Tff7b72def Td2a8ffupdate_row_dataTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3instance_data_tableTb4b4b4, Te6edf3dataTb4b4b4: Tffa657listTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""
Called when a the widget data must be updated.

Remember that this is a heavy function. since the whole data set must
be updated. you can get better results calling this metod with in a
coroutine.
"""

Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ffrow_data Tff7b72= Te6edf3data
Tff7b72selfTff7b72.Td2a8ffrow_data Tff7b72= Te6edf3data
Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ffon_rows_numTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ffrows_numTb4b4b4)
T8b949e# Set cursors to 0.
Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ff_rows_number Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ff_current_value Tff7b72= T79c0ff1

Tff7b72if Tffa657lenTb4b4b4(Te6edf3dataTb4b4b4) Tff7b72< Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ffrows_numTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ff_to_value Tff7b72= Tffa657lenTb4b4b4(Te6edf3dataTb4b4b4)
Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ffpaginationTff7b72.Td2a8ffidsTff7b72.Td2a8ffbutton_forwardTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ff_to_value Tff7b72= Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ffrows_num
Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ffpaginationTff7b72.Td2a8ffidsTff7b72.Td2a8ffbutton_forwardTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72False

Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ffset_next_row_data_partsTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffpaginationTff7b72.Td2a8ffidsTff7b72.Td2a8ffbutton_backTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Tff7b72if Tff7b72selfTff7b72.Td2a8ffuse_paginationTb4b4b4:
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcreate_pagination_menuTb4b4b4, T79c0ff0.5Tb4b4b4)

Tff7b72def Td2a8ffadd_rowTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dataTb4b4b4: Te6edf3UnionTb4b4b4[Tffa657listTb4b4b4, Tffa657tupleTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""
Added new row to common table.
Argument `data` is the row data from the list :attr:`row_data`.

.. rubric:: Add/remove row

.. code-block:: python

from kivy.metrics import dp

from kivymd.app import MDApp
from kivymd.uix.datatables import MDDataTable
from kivymd.uix.boxlayout import MDBoxLayout
from kivymd.uix.floatlayout import MDFloatLayout
from kivymd.uix.button import MDRaisedButton


class Example(MDApp):
data_tables = None

def build(self):
self.theme_cls.theme_style = "Dark"
self.theme_cls.primary_palette = "Orange"

layout = MDFloatLayout() # root layout
# Creating control buttons.
button_box = MDBoxLayout(
pos_hint={"center_x": 0.5},
adaptive_size=True,
padding="24dp",
spacing="24dp",
)

for button_text in ["Add row", "Remove row"]:
button_box.add_widget(
MDRaisedButton(
text=button_text, on_release=self.on_button_press
)
)

# Create a table.
self.data_tables = MDDataTable(
pos_hint={"center_y": 0.5, "center_x": 0.5},
size_hint=(0.9, 0.6),
use_pagination=False,
column_data=[
("No.", dp(30)),
("Column 1", dp(40)),
("Column 2", dp(40)),
("Column 3", dp(40)),
],
row_data=[("1", "1", "2", "3")],
)
# Adding a table and buttons to the toot layout.
layout.add_widget(self.data_tables)
layout.add_widget(button_box)

return layout

def on_button_press(self, instance_button: MDRaisedButton) -> None:
'''Called when a control button is clicked.'''

try:
{
"Add row": self.add_row,
"Remove row": self.remove_row,
}[instance_button.text]()
except KeyError:
pass

def add_row(self) -> None:
last_num_row = int(self.data_tables.row_data[-1][0])
self.data_tables.add_row((str(last_num_row + 1), "1", "2", "3"))

def remove_row(self) -> None:
if len(self.data_tables.row_data) > 1:
self.data_tables.remove_row(self.data_tables.row_data[-1])


Example().run()

.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/data-tables-add-remove-row.gif
:align: center

Deleting checked rows
---------------------

.. code-block:: python

from kivy.metrics import dp
from kivy.lang import Builder
from kivy.clock import Clock

from kivymd.app import MDApp
from kivymd.uix.datatables import MDDataTable
from kivymd.uix.screen import MDScreen

KV = '''
MDBoxLayout:
orientation: "vertical"
padding: "56dp"
spacing: "24dp"

MDData:
id: table_screen

MDRaisedButton:
text: "DELETE CHECKED ROWS"
on_release: table_screen.delete_checked_rows()
'''


class MDData(MDScreen):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.data = [
["1", "Asep Sudrajat", "Male", "Soccer"],
["2", "Egy", "Male", "Soccer"],
["3", "Tanos", "Demon", "Soccer"],
]
self.data_tables = MDDataTable(
use_pagination=True,
check=True,
column_data=[
("No", dp(30)),
("No Urut.", dp(30)),
("Alamat Pengirim", dp(30)),
("No Surat", dp(60)),
]
)
self.data_tables.row_data = self.data
self.add_widget(self.data_tables)

def delete_checked_rows(self):
def deselect_rows(*args):
self.data_tables.table_data.select_all("normal")

for data in self.data_tables.get_row_checks():
self.data_tables.remove_row(data)

Clock.schedule_once(deselect_rows)


class MyApp(MDApp):
def build(self):
self.theme_cls.theme_style = "Dark"
self.theme_cls.primary_palette = "Orange"
return Builder.load_string(KV)


MyApp().run()

.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/data-tables-deleting-checked-rows.gif
:align: center

.. versionadded:: 1.0.0
"""

Tff7b72selfTff7b72.Td2a8ffrow_dataTff7b72.Td2a8ffappendTb4b4b4(Te6edf3dataTb4b4b4)

Tff7b72def Td2a8ffremove_rowTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dataTb4b4b4: Te6edf3UnionTb4b4b4[Tffa657listTb4b4b4, Tffa657tupleTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""
Removed row from common table.
Argument `data` is the row data from the list :attr:`row_data`.

See the code in the doc string for the :attr:`add_row` method for more
information.

.. versionadded:: 1.0.0
"""

Tff7b72selfTff7b72.Td2a8ffrow_dataTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3dataTb4b4b4)

Tff7b72def Td2a8ffupdate_rowTb4b4b4(
Tff7b72selfTb4b4b4, Te6edf3old_dataTb4b4b4: Te6edf3UnionTb4b4b4[Tffa657listTb4b4b4, Tffa657tupleTb4b4b4]Tb4b4b4, Te6edf3new_dataTb4b4b4: Te6edf3UnionTb4b4b4[Tffa657listTb4b4b4, Tffa657tupleTb4b4b4]
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""
Updates a table row.
Argument `old_data/new_data` is the row data from the list :attr:`row_data`.

.. rubric:: Update row

.. code-block:: python

from kivy.metrics import dp

from kivymd.app import MDApp
from kivymd.uix.datatables import MDDataTable
from kivymd.uix.floatlayout import MDFloatLayout
from kivymd.uix.button import MDRaisedButton


class Example(MDApp):
data_tables = None

def build(self):
self.theme_cls.theme_style = "Dark"
self.theme_cls.primary_palette = "Orange"

layout = MDFloatLayout()
layout.add_widget(
MDRaisedButton(
text="Change 2 row",
pos_hint={"center_x": 0.5},
on_release=self.update_row,
y=24,
)
)
self.data_tables = MDDataTable(
pos_hint={"center_y": 0.5, "center_x": 0.5},
size_hint=(0.9, 0.6),
use_pagination=False,
column_data=[
("No.", dp(30)),
("Column 1", dp(40)),
("Column 2", dp(40)),
("Column 3", dp(40)),
],
row_data=[(f"{i + 1}", "1", "2", "3") for i in range(3)],
)
layout.add_widget(self.data_tables)

return layout

def update_row(self, instance_button: MDRaisedButton) -> None:
self.data_tables.update_row(
self.data_tables.row_data[1], # old row data
["2", "A", "B", "C"], # new row data
)


Example().run()

.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/data-tables-change-row.gif
:align: center

.. versionadded:: 1.0.0
"""

Tff7b72for Te6edf3data Tff7b72in Tff7b72selfTff7b72.Td2a8ffrow_dataTb4b4b4:
Tff7b72if Te6edf3data Tff7b72== Te6edf3old_dataTb4b4b4:
Te6edf3index_data Tff7b72= Tff7b72selfTff7b72.Td2a8ffrow_dataTff7b72.Td2a8ffindexTb4b4b4(Te6edf3dataTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrow_dataTb4b4b4[Te6edf3index_dataTb4b4b4] Tff7b72= Te6edf3new_data
Tff7b72break

Tff7b72def Td2a8ffon_row_pressTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3instance_cell_rowTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Called when a table row is clicked."""

Tff7b72def Td2a8ffon_check_pressTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3row_dataTb4b4b4: Tffa657listTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""
Called when the check box in the table row is checked.

:param row_data: One of the elements from the :attr:`MDDataTable.row_data` list.
"""

Tff7b72def Td2a8ffget_row_checksTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4:
T8b949e"""Returns all rows that are checked."""

Tff7b72return Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ff_get_row_checksTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffcreate_pagination_menuTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3intervalTb4b4b4: Te6edf3UnionTb4b4b4[Tffa657intTb4b4b4, Tffa657floatTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3menu_items Tff7b72= Tb4b4b4[
Tb4b4b4{
Ta5d6ff"Ta5d6fftextTa5d6ff"Tb4b4b4: Ta5d6fffTa5d6ff"Tffd700{Te6edf3iTffd700}Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffviewclassTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffOneLineListItemTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffheightTa5d6ff"Tb4b4b4: Te6edf3dpTb4b4b4(T79c0ff56Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffon_releaseTa5d6ff"Tb4b4b4: Tff7b72lambda Te6edf3xTff7b72=Ta5d6fffTa5d6ff"Tffd700{Te6edf3iTffd700}Ta5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ffset_number_displayed_linesTb4b4b4(
Te6edf3x
Tb4b4b4)Tb4b4b4,
Tb4b4b4}
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrows_numTb4b4b4, Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrow_dataTb4b4b4)Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffrows_numTb4b4b4)
Tb4b4b4]
Te6edf3pagination_menu Tff7b72= Te6edf3MDDropdownMenuTb4b4b4(
Te6edf3callerTff7b72=Tff7b72selfTff7b72.Td2a8ffpaginationTff7b72.Td2a8ffidsTff7b72.Td2a8ffdrop_itemTb4b4b4,
Te6edf3itemsTff7b72=Te6edf3menu_itemsTb4b4b4,
Te6edf3positionTff7b72=Tff7b72selfTff7b72.Td2a8ffpagination_menu_posTb4b4b4,
Te6edf3max_heightTff7b72=Tff7b72selfTff7b72.Td2a8ffpagination_menu_heightTb4b4b4,
Te6edf3width_multTff7b72=T79c0ff2Tb4b4b4,
Tb4b4b4)
Te6edf3pagination_menuTff7b72.Td2a8ffbindTb4b4b4(
Te6edf3on_dismissTff7b72=Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ffclose_pagination_menuTb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fftable_dataTff7b72.Td2a8ffpagination_menu Tff7b72= Te6edf3pagination_menu

Tff7b72def Td2a8ff_scroll_with_headerTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3instanceTb4b4b4, Te6edf3valueTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffheaderTff7b72.Td2a8ffscroll_x Tff7b72= Te6edf3value


Tff7b72class T56d364CellRowTb4b4b4(
Te6edf3RecycleDataViewBehaviorTb4b4b4,
Te6edf3HoverBehaviorTb4b4b4,
Te6edf3ButtonBehaviorTb4b4b4,
Te6edf3MDBoxLayoutTb4b4b4,
Tb4b4b4)Tb4b4b4:
T8b949e"""Implements a data row from :attr:`~MDDataTable.column_data`."""

Te6edf3background_color_cell Tff7b72= Te6edf3ColorPropertyTb4b4b4(Tff7b72NoneTb4b4b4)
T8b949e"""
See :attr:`~MDDataTable.background_color_cell.`.

.. versionadded:: 1.0.0

:attr:`background_color_cell` is a :class:`~kivy.properties.ColorProperty`
and defaults to `None`.
"""

Te6edf3background_color_selected_cell Tff7b72= Te6edf3ColorPropertyTb4b4b4(Tff7b72NoneTb4b4b4)
T8b949e"""
See :attr:`~MDDataTable.background_color_selected_cell.`.

.. versionadded:: 1.0.0

:attr:`background_color_selected_cell` is a :class:`~kivy.properties.ColorProperty`
and defaults to `None`.
"""

Te6edf3text Tff7b72= Te6edf3StringPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
Row text.

:attr:`text` is a :class:`~kivy.properties.StringProperty`
and defaults to `''`.
"""

Te6edf3table Tff7b72= Te6edf3ObjectPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
Class class:`~TableData`.

:attr:`table` is a :class:`~kivy.properties.ObjectProperty`
and defaults to `None`.
"""

Te6edf3icon Tff7b72= Te6edf3StringPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
Row icon name.

:attr:`icon` is a :class:`~kivy.properties.StringProperty`
and defaults to `''`.
"""

Te6edf3icon_color Tff7b72= Te6edf3ColorPropertyTb4b4b4(Tff7b72NoneTb4b4b4)
T8b949e"""
Row icon color.

:attr:`icon_color` is a :class:`~kivy.properties.ColorProperty`
and defaults to `None`.
"""

Te6edf3selected Tff7b72= Te6edf3BooleanPropertyTb4b4b4(Tff7b72FalseTb4b4b4)
Te6edf3selectable Tff7b72= Te6edf3BooleanPropertyTb4b4b4(Tff7b72TrueTb4b4b4)
Te6edf3index Tff7b72= Tff7b72None
Te6edf3icon_copy Tff7b72= Te6edf3icon

Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffcheckTff7b72.Td2a8ffbindTb4b4b4(Te6edf3activeTff7b72=Tff7b72selfTff7b72.Td2a8ffselect_checkTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffcheckTff7b72.Td2a8ffbindTb4b4b4(Te6edf3activeTff7b72=Tff7b72selfTff7b72.Td2a8ffnotify_checkbox_clickTb4b4b4)

Tff7b72def Td2a8ffnotify_checkbox_clickTb4b4b4(
Tff7b72selfTb4b4b4, Te6edf3instance_checkTb4b4b4: Te6edf3MDCheckboxTb4b4b4, Te6edf3activeTb4b4b4: Tffa657bool
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Called when the table row checkbox is activated/deactivated."""

Tff7b72selfTff7b72.Td2a8fftableTff7b72.Td2a8ffget_select_rowTb4b4b4(Tff7b72selfTff7b72.Td2a8ffindexTb4b4b4)

Tff7b72def Td2a8ffrefresh_view_attrsTb4b4b4(
Tff7b72selfTb4b4b4, Te6edf3instance_table_dataTb4b4b4: Te6edf3TableDataTb4b4b4, Te6edf3indexTb4b4b4: Tffa657intTb4b4b4, Te6edf3dataTb4b4b4: Tffa657dict
Tb4b4b4)Tb4b4b4:
T8b949e"""
Called by the :class:`RecycleAdapter` when the view is initially
populated with the values from the `data` dictionary for this item.

Any pos or size info should be removed because they are set
subsequently with :attr:`refresh_view_layout`.

:Parameters:

`table_data`: :class:`TableData` instance
The :class:`TableData` that caused the update.
`data`: dict
The data dict used to populate this view.
"""

Tff7b72selfTff7b72.Td2a8ffindex Tff7b72= Te6edf3index
Tff7b72return Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffrefresh_view_attrsTb4b4b4(Te6edf3instance_table_dataTb4b4b4, Te6edf3indexTb4b4b4, Te6edf3dataTb4b4b4)

Tff7b72def Td2a8ffapply_selectionTb4b4b4(
Tff7b72selfTb4b4b4, Te6edf3instance_table_dataTb4b4b4: Te6edf3TableDataTb4b4b4, Te6edf3indexTb4b4b4: Tffa657intTb4b4b4, Te6edf3is_selectedTb4b4b4: Tffa657bool
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Called when list items of table appear on the screen."""

Tff7b72selfTff7b72.Td2a8ffselected Tff7b72= Te6edf3is_selected

T8b949e# Fixes cloning of icons.
Te6edf3ic Tff7b72= Te6edf3instance_table_dataTff7b72.Td2a8ffrecycle_dataTb4b4b4[Te6edf3indexTb4b4b4]Tff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fficonTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4)
Te6edf3cell_row_obj Tff7b72= Te6edf3instance_table_dataTff7b72.Td2a8ffview_adapterTff7b72.Td2a8ffget_visible_viewTb4b4b4(Te6edf3indexTb4b4b4)

Tff7b72if Tff7b72not Te6edf3icTb4b4b4:
Te6edf3cell_row_objTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3cell_row_objTff7b72.Td2a8fficon Tff7b72= Te6edf3cell_row_objTff7b72.Td2a8fficon_copy

T8b949e# Set checkboxes.
Tff7b72if Te6edf3instance_table_dataTff7b72.Td2a8ffcheckTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffindex Tff7b72in Te6edf3instance_table_dataTff7b72.Td2a8ffdata_first_cellsTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffcheckTff7b72.Td2a8ffsize Tff7b72= Tb4b4b4(Te6edf3dpTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4, Te6edf3dpTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffcheckTff7b72.Td2a8ffopacity Tff7b72= T79c0ff1
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffboxTff7b72.Td2a8ffspacing Tff7b72= Te6edf3dpTb4b4b4(T79c0ff16Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffboxTff7b72.Td2a8ffpaddingTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72= Te6edf3dpTb4b4b4(T79c0ff8Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffcheckTff7b72.Td2a8ffsize Tff7b72= Tb4b4b4(T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffcheckTff7b72.Td2a8ffopacity Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffboxTff7b72.Td2a8ffspacing Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffboxTff7b72.Td2a8ffpaddingTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72= T79c0ff0

T8b949e# Set checkboxes state.
Tff7b72if Tb4b4b4(
Te6edf3instance_table_dataTff7b72.Td2a8ff_rows_number
Tff7b72in Te6edf3instance_table_dataTff7b72.Td2a8ffcurrent_selection_check
Tb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3index Tff7b72in Te6edf3instance_table_dataTff7b72.Td2a8ffcurrent_selection_checkTb4b4b4[
Te6edf3instance_table_dataTff7b72.Td2a8ff_rows_number
Tb4b4b4]Tb4b4b4:
Tff7b72if Tb4b4b4(
Tff7b72selfTff7b72.Td2a8ffindex
Tff7b72in Te6edf3instance_table_dataTff7b72.Td2a8ffcurrent_selection_checkTb4b4b4[
Te6edf3instance_table_dataTff7b72.Td2a8ff_rows_number
Tb4b4b4]
Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffchange_check_state_no_notifyTb4b4b4(Ta5d6ff"Ta5d6ffdownTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffchange_check_state_no_notifyTb4b4b4(Ta5d6ff"Ta5d6ffnormalTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffchange_check_state_no_notifyTb4b4b4(Ta5d6ff"Ta5d6ffnormalTa5d6ff"Tb4b4b4)

Tff7b72def Td2a8ffchange_check_state_no_notifyTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3new_stateTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3checkbox Tff7b72= Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffcheck
Te6edf3checkboxTff7b72.Td2a8ffunbindTb4b4b4(Te6edf3activeTff7b72=Tff7b72selfTff7b72.Td2a8ffnotify_checkbox_clickTb4b4b4)
Te6edf3checkboxTff7b72.Td2a8ffstate Tff7b72= Te6edf3new_state
Te6edf3checkboxTff7b72.Td2a8ffbindTb4b4b4(Te6edf3activeTff7b72=Tff7b72selfTff7b72.Td2a8ffnotify_checkbox_clickTb4b4b4)

Tff7b72def Td2a8ffselect_checkTb4b4b4(
Tff7b72selfTb4b4b4, Te6edf3instance_table_dataTb4b4b4: Te6edf3MDDataTableTb4b4b4, Te6edf3activeTb4b4b4: Tffa657bool
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Called upon activation/deactivation of the checkbox."""

Tff7b72if Te6edf3activeTb4b4b4:
Tff7b72if Tb4b4b4(
Tff7b72selfTff7b72.Td2a8fftableTff7b72.Td2a8ff_rows_number
Tff7b72not Tff7b72in Tff7b72selfTff7b72.Td2a8fftableTff7b72.Td2a8ffcurrent_selection_check
Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftableTff7b72.Td2a8ffcurrent_selection_checkTb4b4b4[Tff7b72selfTff7b72.Td2a8fftableTff7b72.Td2a8ff_rows_numberTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72if Tb4b4b4(
Tff7b72selfTff7b72.Td2a8ffindex
Tff7b72not Tff7b72in Tff7b72selfTff7b72.Td2a8fftableTff7b72.Td2a8ffcurrent_selection_checkTb4b4b4[
Tff7b72selfTff7b72.Td2a8fftableTff7b72.Td2a8ff_rows_number
Tb4b4b4]
Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftableTff7b72.Td2a8ffcurrent_selection_checkTb4b4b4[
Tff7b72selfTff7b72.Td2a8fftableTff7b72.Td2a8ff_rows_number
Tb4b4b4]Tff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffindexTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fftableTff7b72.Td2a8ff_rows_number Tff7b72in Tff7b72selfTff7b72.Td2a8fftableTff7b72.Td2a8ffcurrent_selection_checkTb4b4b4:
Tff7b72if Tb4b4b4(
Tff7b72selfTff7b72.Td2a8ffindex
Tff7b72in Tff7b72selfTff7b72.Td2a8fftableTff7b72.Td2a8ffcurrent_selection_checkTb4b4b4[
Tff7b72selfTff7b72.Td2a8fftableTff7b72.Td2a8ff_rows_number
Tb4b4b4]
Tff7b72and Tff7b72not Te6edf3active
Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftableTff7b72.Td2a8ffcurrent_selection_checkTb4b4b4[
Tff7b72selfTff7b72.Td2a8fftableTff7b72.Td2a8ff_rows_number
Tb4b4b4]Tff7b72.Td2a8ffremoveTb4b4b4(Tff7b72selfTff7b72.Td2a8ffindexTb4b4b4)

Tff7b72def Td2a8ffon_touch_downTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3touchTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffon_touch_downTb4b4b4(Te6edf3touchTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fftableTff7b72.Td2a8ff_parentTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftableTff7b72.Td2a8ff_parentTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_row_pressTa5d6ff"Tb4b4b4, Tff7b72selfTb4b4b4)
Tff7b72return Tff7b72True

Tff7b72def Td2a8ffon_iconTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3instance_cell_rowTb4b4b4, Te6edf3name_iconTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8fficon_copy Tff7b72= Te6edf3name_icon

Tff7b72def Td2a8ffon_tableTb4b4b4(
Tff7b72selfTb4b4b4, Te6edf3instance_cell_rowTb4b4b4, Te6edf3instance_table_dataTb4b4b4: Te6edf3TableData
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Sets padding/spacing to zero if no checkboxes are used for rows."""

Tff7b72if Tff7b72not Te6edf3instance_table_dataTff7b72.Td2a8ffcheckTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffboxTff7b72.Td2a8ffpadding Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffboxTff7b72.Td2a8ffspacing Tff7b72= T79c0ff0

Tff7b72def Td2a8ff_check_allTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3stateTb4b4b4)Tb4b4b4:
T8b949e"""Checks if all checkboxes are in same state."""

Tff7b72if Te6edf3state Tff7b72== Ta5d6ff"Ta5d6ffdownTa5d6ff" Tff7b72and Tff7b72selfTff7b72.Td2a8fftableTff7b72.Td2a8ffcheck_allTb4b4b4(Te6edf3stateTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftableTff7b72.Td2a8fftable_headerTff7b72.Td2a8ffidsTff7b72.Td2a8ffcheckTff7b72.Td2a8ffstate Tff7b72= Ta5d6ff"Ta5d6ffdownTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftableTff7b72.Td2a8fftable_headerTff7b72.Td2a8ffidsTff7b72.Td2a8ffcheckTff7b72.Td2a8ffstate Tff7b72= Ta5d6ff"Ta5d6ffnormalTa5d6ff"


Tff7b72class T56d364SortButtonTb4b4b4(Te6edf3MDIconButtonTb4b4b4)Tb4b4b4:
T8b949e"""Implements a sort button in the :class:`~CellHeader` class."""


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────